﻿// 301  中国剩余定理.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>


using namespace std;
/*
http://oj.daimayuan.top/course/21/problem/515
一共T组数据，每组数据，给定n个方程，求x≡ai(modmi)。

输入格式
第一行一个整数T。

接下来对于每组数据，第一行一个整数n，接下来n行，每行两个整数ai,mi。

输出格式
对于每组数据，一个整数，表示答案，答案一定要在0
到lcm(m1,m2,…,mn)−1之间，数据保证有解。

样例输入
1
3
1 10
2 11
3 12
样例输出
651
数据规模
保证T≤1000,n≤10,0≤ai<mi≤109
，保证lcm(m1,m2,…,mn)
不超过10^18。
*/

typedef long long ll;

ll exgcd(ll a, ll b, ll& x, ll& y) {
    if (b == 0) {
        x = 1; y = 0; return a;
    }
    ll d = exgcd(b, a % b, y, x);
    y -= (a / b) * x;
    return d;
}

void merge(ll& a, ll& b, ll c, ll d) {
    if (a == -1 && b == -1) return;
    ll x, y;
    ll g = exgcd(b, d, x, y);
    if ((c - a) % g != 0) {
        a = b = -1; return;
    }
    d /= g;
    ll t0 = ((c - a) / g)%d * x%d;
    if (t0 < 0) t0 += d;
    a = b * t0 + a;
    b = b * d;

}
int n;
void solve() {
    scanf("%d",&n);
    ll a = 0, b = 1;
    for (int i = 0; i < n; i++) {
        int c, d;
        scanf("%d%d",&c,&d);
        merge(a,b,c,d);
    }

    printf("%lld\n",a);
}

int main()
{
    int T;
    scanf("%d", &T);
    for (int tc = 0; tc < T; tc++) {
        solve();
    }

    return 0;
}

 